package com.ruoyi.common.core.plus.web.service;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.io.Serializable;
import java.util.List;

/**
 * @author liyang
 * @date 2021-08-17 19:23:30
 * @description CRUD的Service接口
 */
public interface BaseCrudService<E> {

    /**
     * 通过主键查询
     *
     * @param id
     * @return
     */
    E getById(Serializable id);

    /**
     * 兼容方法
     * @param id
     * @return
     */
    E getById(Long id);

    /**
     * 通过构造器条件查询
     *
     * @param wrapper
     * @return
     */
    Long count(Wrapper<E> wrapper);

    /**
     * 通过多个主键查询
     *
     * @param ids
     * @return
     */
    List<E> getByIds(Serializable[] ids);

    /**
     * 通过一个对象查询
     *
     * @param e
     * @param columns
     * @return
     */
    List<E> getByList(E e, String... columns);

    /**
     * 通过构造器条件查询
     *
     * @param wrapper
     * @return
     */
    List<E> getByList(Wrapper<E> wrapper);

    /**
     * 通过对象条件分页查询
     *
     * @param page
     * @param e
     * @param columns
     * @return
     */
    Page<E> getByPage(Page<E> page, E e, String... columns);

    /**
     * 通过构造器条件分页查询
     *
     * @param page
     * @param wrapper
     * @return
     */
    Page<E> getByPage(Page<E> page, Wrapper<E> wrapper);

    /**
     * 通过构造器查询
     *
     * @param wrapper
     * @return
     */
    E getByObj(Wrapper<E> wrapper);

    /**
     * 通过对象查询
     *
     * @param e
     * @return
     */
    E getByObj(E e);

    /**
     * 新增
     *
     * @param e
     * @return
     */
    E save(E e);

    /**
     * 修改
     *
     * @param e
     * @return
     */
    int update(E e);

    /**
     * 通过构造器修改
     *
     * @param e
     * @param uw
     * @return
     */
    int update(E e, Wrapper<E> uw);

    /**
     * 通过wrapper修改
     *
     * @param uw
     * @return
     */
    int update(Wrapper<E> uw);

    /**
     * 通过多个id删除
     *
     * @param ids
     * @return
     */
    int delete(Serializable[] ids);

    /**
     * 通过构造器删除
     *
     * @param wrapper
     * @return
     */
    int delete(Wrapper<E> wrapper);

    /**
     * 根据Id删除
     * @param id
     * @return
     */
    int deleteById(Serializable id);

}
